package com.bt.springboot.demo;

import com.bt.springboot.entity.Person;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * lambda表达式
 *
 * @author zkx
 * @Date 2023/3/20 13:44
 */
public class LambdaDemo {

	public static void main(String[] args) {
		List<Person> list = new ArrayList<>();
		list.add(Person.builder().id(1L).name("张三").age(20).build());
		list.add(Person.builder().id(2L).name("李四").age(21).build());
		list.add(Person.builder().id(3L).name("王五").age(22).build());

		// 1.list转map
//		Map<Long, Person> listToMap = listToMap(list);
//		listToMap.forEach((k, v) -> System.out.println(k + ":\t" + v));

		// 2.收集器 将元素分为两部分
//		Map<Boolean, List<Person>> partitioning = partitioning(list);
//		partitioning.forEach((k,v) -> System.out.println(k + "\t" + v));

		// 3.收集器 list分组
		Map<String, List<Person>> group = group(list);
		group.forEach((k,v) -> System.out.println(k + "\t" + v));
	}

	/**
	 * list转map
	 *
	 * @param list
	 * @return
	 */
	public static Map<Long, Person> listToMap(List<Person> list) {
		return list.stream().collect(Collectors.toMap(Person::getId, person -> person, (k1, k2) -> k1));
	}

	/**
	 * 元素分两部分
	 * @param list
	 * @return
	 */
	public static Map<Boolean,List<Person>> partitioning(List<Person> list) {
		return list.stream().collect(Collectors.partitioningBy(p -> p.getAge() > 20));
	}

	/**
	 * 分组
	 * @param list
	 * @return
	 */
	public static Map<String,List<Person>> group(List<Person> list){
		return list.stream().collect(Collectors.groupingBy(p -> {
			if(p.getAge() > 21) {
				return "A";
			}else {
				return "B";
			}
		}));
	}
}
